JSONP (JavaScript Object Notation with Padding) হল একটি ডাটা ফরম্যাট যা Ajax এর মাধ্যমে ক্রস-ডোমেইন রিকোয়েস্ট করতে ব্যবহৃত হয়। Ajax রিকোয়েস্ট সাধারণত একই ডোমেইনে সীমাবদ্ধ থাকে (Same-Origin Policy)। JSONP এই সীমাবদ্ধতা অতিক্রম করার একটি পদ্ধতি, যা সাইটগুলোকে এক ডোমেইন থেকে অন্য ডোমেইনে ডেটা রিকোয়েস্ট করতে সক্ষম করে।
JSONP একটি GET রিকোয়েস্ট ব্যবহার করে কাজ করে। এটি সরাসরি একটি <script>
ট্যাগ যুক্ত করে জাভাস্ক্রিপ্ট কোড হিসেবে সার্ভার থেকে ডেটা লোড করে। JSONP রেসপন্স সার্ভার থেকে একটি ফাংশন কল হিসেবে আসে যা ক্লায়েন্ট সাইডে ডেটা প্রসেস করে। এটি কাজ করে নিম্নলিখিত ধাপে:
<script>
ট্যাগ ব্যবহার করে JSONP রিকোয়েস্ট করা হয় এবং সেই সাথে সেই callback function এর নাম পাঠানো হয়।<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSONP Example</title>
</head>
<body>
<h1>JSONP Example</h1>
<button onclick="fetchData()">Fetch Data</button>
<div id="data-container">
<!-- ডেটা এখানে দেখানো হবে -->
</div>
<script>
// Callback function যা JSONP রেসপন্স হ্যান্ডল করবে
function handleResponse(data) {
var container = document.getElementById('data-container');
container.innerHTML = 'Name: ' + data.name + ', Age: ' + data.age;
}
// JSONP রিকোয়েস্ট পাঠানোর ফাংশন
function fetchData() {
var script = document.createElement('script');
script.src = 'https://example.com/api?callback=handleResponse';
document.body.appendChild(script);
}
</script>
</body>
</html>
ব্যাখ্যা:
handleResponse
ফাংশনটি সার্ভার থেকে প্রাপ্ত JSONP ডেটা প্রসেস করে।fetchData()
ফাংশন একটি <script>
ট্যাগ তৈরি করে এবং সেটি ডকুমেন্টে যোগ করে। এর মাধ্যমে ব্রাউজার সার্ভার থেকে জাভাস্ক্রিপ্ট রেসপন্স লোড করে।handleResponse
ফাংশন কল করে এবং ডেটা প্রসেস করে।handleResponse({"name": "John", "age": 30});
<script>
ট্যাগ ব্যবহার করে এবং একটি callback ফাংশন কল করে।<script>
ট্যাগের মাধ্যমে সরাসরি জাভাস্ক্রিপ্ট লোড করে। যদি সার্ভার হ্যাক হয়ে যায় বা ম্যালিশিয়াস কোড পাঠায়, তাহলে সেটি ক্লায়েন্ট সাইডে এক্সিকিউট হবে।<script>
ট্যাগ ব্যবহার করে JSON ডেটা একটি callback function এর মাধ্যমে প্রসেস করা হয়।JSONP এখনও অনেক ক্ষেত্রে ব্যবহার করা হয়, তবে নিরাপত্তা এবং ফ্লেক্সিবিলিটির জন্য CORS (Cross-Origin Resource Sharing) বর্তমানে JSONP এর একটি আধুনিক বিকল্প হিসেবে বেশি ব্যবহৃত হয়। CORS Ajax রিকোয়েস্টের জন্য আরও বেশি নিরাপত্তা এবং নিয়ন্ত্রণ প্রদান করে।
Cross-Domain Request হল ক্লায়েন্ট (ব্রাউজার) থেকে এমন একটি HTTP রিকোয়েস্ট যা একটি ভিন্ন ডোমেইনে পাঠানো হয়। উদাহরণস্বরূপ, যদি আপনার ওয়েব অ্যাপ্লিকেশন https://example.com
থেকে https://api.anotherdomain.com
এ রিকোয়েস্ট পাঠায়, তাহলে এটি একটি Cross-Domain Request।
Same-Origin Policy এর কারণে ব্রাউজার স্বয়ংক্রিয়ভাবে Cross-Domain রিকোয়েস্ট ব্লক করে। এটি ব্রাউজারের একটি সিকিউরিটি ফিচার যা ব্যবহারকারীদের তথ্য রক্ষা করে এবং সাইটগুলোকে একে অপরের ডেটাতে অবৈধভাবে অ্যাক্সেস করা থেকে বাধা দেয়।
JSONP (JavaScript Object Notation with Padding) একটি পুরোনো কিন্তু কার্যকরী পদ্ধতি যা Cross-Domain রিকোয়েস্টের সমস্যা সমাধান করে। এটি Same-Origin Policy কে বাইপাস করতে একটি সৃজনশীল উপায় ব্যবহার করে।
<script>
ট্যাগ ব্যবহার করে যেকোনো ডোমেইন থেকে জাভাস্ক্রিপ্ট লোড করা সম্ভব। এটি Same-Origin Policy এর আওতায় পড়ে না।<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSONP Example</title>
</head>
<body>
<h1>JSONP Example</h1>
<button onclick="fetchData()">Fetch Data</button>
<div id="data-container">
<!-- ডেটা এখানে দেখানো হবে -->
</div>
<script>
// Callback function যা JSONP রেসপন্স হ্যান্ডল করবে
function handleResponse(data) {
var container = document.getElementById('data-container');
container.innerHTML = 'Name: ' + data.name + ', Age: ' + data.age;
}
// JSONP রিকোয়েস্ট পাঠানোর ফাংশন
function fetchData() {
var script = document.createElement('script');
script.src = 'https://api.externaldomain.com/getData?callback=handleResponse';
document.body.appendChild(script);
}
</script>
</body>
</html>
handleResponse({
"name": "John Doe",
"age": 30
});
ব্যাখ্যা:
handleResponse
নামের একটি ফাংশন তৈরি করা হয়েছে, যা সার্ভার থেকে প্রাপ্ত ডেটা প্রসেস করে।fetchData()
ফাংশন একটি <script>
ট্যাগ তৈরি করে এবং সেটি ব্রাউজারে যোগ করে, যাতে ব্রাউজার সার্ভার থেকে জাভাস্ক্রিপ্ট কোড লোড করে।বর্তমানে JSONP এর বদলে CORS বেশি ব্যবহৃত হয়, কারণ এটি নিরাপত্তা এবং সিকিউরিটি মেনে Cross-Domain রিকোয়েস্ট করতে সক্ষম। CORS এর মাধ্যমে সার্ভার হেডারে উপযুক্ত কনফিগারেশন করে Cross-Domain রিকোয়েস্ট অনুমতি দেওয়া হয়। এটি JSONP এর ঝুঁকিগুলো এড়িয়ে Ajax এর মাধ্যমে Cross-Domain রিকোয়েস্টের অনুমতি দেয়।
JSONP ব্যবহার করে Ajax Request তৈরি করা একটি কার্যকর পদ্ধতি, যা Cross-Domain Request এর সমস্যা সমাধান করে। JSONP মূলত একটি GET রিকোয়েস্ট ব্যবহার করে ডেটা রিকোয়েস্ট করে এবং তা callback function এর মাধ্যমে প্রসেস করে। JSONP এর মাধ্যমে Ajax রিকোয়েস্ট তৈরি করতে হলে একটি <script>
ট্যাগ তৈরি করতে হয় এবং সেটি ডকুমেন্টে অ্যাড করা হয়। এরপর সার্ভার JSON ডেটা রেসপন্স হিসেবে ফেরত পাঠায়, যা জাভাস্ক্রিপ্ট ফাংশনের মাধ্যমে প্রসেস হয়।
নিচে একটি উদাহরণ দেওয়া হলো যেখানে JSONP ব্যবহার করে একটি Ajax রিকোয়েস্ট তৈরি করা হয়েছে এবং সেই ডেটা প্রসেস করা হয়েছে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSONP Ajax Request Example</title>
</head>
<body>
<h1>JSONP Example</h1>
<button onclick="fetchData()">Fetch Data</button>
<div id="data-container">
<!-- JSONP ডেটা এখানে দেখানো হবে -->
</div>
<script>
// Callback function যা JSONP রেসপন্স হ্যান্ডল করবে
function handleResponse(data) {
var container = document.getElementById('data-container');
container.innerHTML = 'Name: ' + data.name + ', Age: ' + data.age;
}
// JSONP রিকোয়েস্ট পাঠানোর ফাংশন
function fetchData() {
// <script> ট্যাগ তৈরি করা
var script = document.createElement('script');
// JSONP রিকোয়েস্ট URL সেট করা
// এখানে callback=handleResponse ব্যবহার করা হয়েছে
script.src = 'https://example.com/api?callback=handleResponse';
// ডকুমেন্টে <script> ট্যাগ অ্যাড করা
document.body.appendChild(script);
}
</script>
</body>
</html>
১. Callback Function:
handleResponse
ফাংশনটি সার্ভার থেকে JSONP রেসপন্স পাওয়ার পরে এক্সিকিউট হয়।২. Script Tag Creation:
fetchData()
ফাংশনটি একটি <script>
ট্যাগ তৈরি করে এবং সেটি ডকুমেন্টে অ্যাড করে।script.src
এ JSONP রিকোয়েস্টের URL সেট করা হয়েছে, যেখানে callback
প্যারামিটার হিসেবে handleResponse
পাস করা হয়েছে।৩. Server Response:
handleResponse({
"name": "John Doe",
"age": 30
});
handleResponse
ফাংশনকে কল করে এবং ডেটা প্রসেস করে।সার্ভার সাইডে JSONP রেসপন্স তৈরি করতে, সার্ভারকে callback প্যারামিটার অনুযায়ী রেসপন্স দিতে হবে। উদাহরণস্বরূপ, যদি callback হিসেবে handleResponse
পাঠানো হয়, তাহলে সার্ভার থেকে রেসপন্সটি হতে পারে:
<?php
// প্যারামিটার সংগ্রহ করা
$callback = $_GET['callback'];
// JSON ডেটা তৈরি করা
$data = array(
"name" => "John Doe",
"age" => 30
);
// JSONP রেসপন্স তৈরি করা
header('Content-Type: application/javascript');
echo $callback . '(' . json_encode($data) . ');';
?>
ব্যাখ্যা:
callback
) সংগ্রহ করা হয়েছে।json_encode()
ফাংশন ব্যবহার করে JSON ফরম্যাটে কনভার্ট করা হয়েছে।handleResponse
) কল করা হয়েছে এবং JSON ডেটা তার প্যারামিটার হিসেবে পাঠানো হয়েছে।<script>
ট্যাগ এবং একটি callback function প্রয়োজন, যা সহজ এবং কার্যকর পদ্ধতি।JSONP এখনও অনেক ক্ষেত্রে ব্যবহার করা হয়, তবে নিরাপত্তা এবং ফ্লেক্সিবিলিটির জন্য আধুনিক অ্যাপ্লিকেশনগুলোতে CORS (Cross-Origin Resource Sharing) বেশি ব্যবহৃত হয়। CORS Ajax রিকোয়েস্টের জন্য আরও বেশি নিরাপত্তা এবং নিয়ন্ত্রণ প্রদান করে।
JSONP এর মাধ্যমে Ajax রিকোয়েস্ট তৈরি করা একটি কার্যকর পদ্ধতি, যা Cross-Domain Request এর সীমাবদ্ধতা অতিক্রম করে। JSONP শুধুমাত্র GET রিকোয়েস্ট ব্যবহার করে কাজ করে এবং সার্ভার থেকে সরাসরি জাভাস্ক্রিপ্ট কোড লোড করে ব্রাউজারে এক্সিকিউট করে। নিচে একটি উদাহরণ দেওয়া হয়েছে যেখানে JSONP ব্যবহার করে Ajax রিকোয়েস্ট তৈরি করা হয়েছে এবং JSON ডেটা ফেচ করা হয়েছে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSONP Data Request Example</title>
</head>
<body>
<h1>JSONP Data Fetch Example</h1>
<button onclick="fetchData()">Fetch Data</button>
<div id="data-container">
<!-- JSONP ডেটা এখানে দেখানো হবে -->
</div>
<script>
// Callback function যা JSONP রেসপন্স হ্যান্ডল করবে
function handleResponse(data) {
var container = document.getElementById('data-container');
container.innerHTML = 'Name: ' + data.name + ', Age: ' + data.age;
}
// JSONP রিকোয়েস্ট পাঠানোর ফাংশন
function fetchData() {
// <script> ট্যাগ তৈরি করা
var script = document.createElement('script');
// JSONP রিকোয়েস্ট URL সেট করা যেখানে callback=handleResponse ব্যবহার করা হয়েছে
script.src = 'https://example.com/api?callback=handleResponse';
// ডকুমেন্টে <script> ট্যাগ অ্যাড করা
document.body.appendChild(script);
}
</script>
</body>
</html>
Callback Function:
handleResponse
ফাংশনটি ক্লায়েন্ট সাইডে তৈরি করা হয়েছে, যা সার্ভার থেকে প্রাপ্ত JSONP রেসপন্স হ্যান্ডল করে এবং HTML ডিভ (data-container
) এ ডেটা প্রদর্শন করে।Script Tag Creation:
fetchData()
ফাংশন একটি <script>
ট্যাগ তৈরি করে এবং সেটি ডকুমেন্টে যোগ করে। এর ফলে ব্রাউজার থেকে সার্ভার পর্যন্ত একটি JSONP রিকোয়েস্ট পাঠানো হয়।callback=handleResponse
পাঠানো হয়েছে, যা সার্ভারকে নির্দেশ করে যে JSON রেসপন্সটি handleResponse
ফাংশনের মাধ্যমে প্রসেস করা হবে।Server Response:
handleResponse({
"name": "John Doe",
"age": 30
});
handleResponse
ফাংশন কল হয়, যা ডেটা প্রসেস করে এবং UI এ প্রদর্শন করে।<?php
// প্যারামিটার সংগ্রহ করা
$callback = $_GET['callback'];
// JSON ডেটা তৈরি করা
$data = array(
"name" => "John Doe",
"age" => 30
);
// JSONP রেসপন্স তৈরি করা
header('Content-Type: application/javascript');
echo $callback . '(' . json_encode($data) . ');';
?>
ব্যাখ্যা:
callback
প্যারামিটার সংগ্রহ করা হয়েছে, যা ক্লায়েন্ট সাইডে পাঠানো হয়েছে (উদাহরণ: handleResponse
)।json_encode()
ফাংশন ব্যবহার করে JSON ফরম্যাটে কনভার্ট করা হয়েছে।handleResponse
) কল করা হয়েছে এবং JSON ডেটা তার প্যারামিটার হিসেবে পাঠানো হয়েছে।Cross-Domain Request সমাধান:
সহজ Implementation:
<script>
ট্যাগ এবং একটি callback function দিয়ে এটি করা যায়।Immediate Execution: